package Java8新日期时间API;

import org.junit.Test;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/*
    LocalDate、LocalTime、LocalDateTime类的实例是不可变的对象,分别
    表示使用 ISO-8601日历系统(公历)的日期、时间、日期和时间,它们提供了
    简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息
        LocalDate:代表IOS格式(yyyy-MM-dd)的日期,可以存储生日、纪念日等日期
        LocalTime:表示一个时间,而不是日期
        LocalDateTime:是用来表示日期和时间

    常用API
        now() / now(ZoneId zone):静态方法,根据当前时间创建对象/指定时区的对象
        of():静态方法，根据指定日期/时间创建对象
        getDayOfMonth()/getDayOfYear():获得月份天数(1-31)/获得年份天数(1-366)
        getDayOfWeek():获得星期几(返回一个DayOfWeek枚举值)
        getMonth():获得月份,返回一个Month枚举值
        getMonthValue()/getYear():获得月份(1-12)/获得年份
        getHour()/getMinute()/getSecond():获得当前对象对应的小时、分钟、秒
        withDayOfMonth()/withDayOfYear()/ withMonth()/withYear():将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
        plusDays()/plusWeeks()/plusMonths()/plusYears()/plusHours():向当前对象添加几天、几周、几个月、几年、几小时
        minusMonths()/minusWeeks()/minusDays()/minusYears()/minusHours():从当前对象减去几月、几周、几天、几年、几小时
 */
public class DateTest01 {
    //常用方法
    @Test
    public void test1(){
        //获取当前年份
        int year = LocalDate.now().getYear();

        //获取当前月份,月份字段从1到12
        int monthValue = LocalDate.now().getMonthValue();

        //今天是当前年份的第几天
        int dayOfYear = LocalDate.now().getDayOfYear();

        //今天是当前月份的第几天
        int dayOfMonth = LocalDate.now().getDayOfMonth();

        //今天是当前周的第几天(从周一开始计算)
        int value = LocalDate.now().getDayOfWeek().getValue();
        System.out.println(value);

        //指定某一年的第几天,1=第一天、365=最后一天
        System.out.println(LocalDate.ofYearDay(2019, 1));
        System.out.println(LocalDate.ofYearDay(2019,365));

        //指定某一年某一月的第几天,月份从1到12
        System.out.println(LocalDate.of(2019,3,20));

        //年减运算
        LocalDate.now().minusYears(1);

        //月减运算:超过12会自动计算为去年
        LocalDate.now().minusMonths(1);

        //周减运算
        LocalDate.now().minusWeeks(1);

        //天减运算
        LocalDate.now().minusDays(1);

        //年加运算
        LocalDate.now().plusYears(1);

        //月加运算:超过12会自动计算为去年
        LocalDate.now().plusMonths(1);

        //周加运算
        LocalDate.now().plusWeeks(1);

        //天加运算
        LocalDate.now().plusDays(1);

        //指定年
        LocalDate.now().withYear(2019);

        //指定月
        LocalDate.now().withMonth(2);

        //指定当前年内的某一天
        LocalDate.now().withDayOfYear(12);

        //指定当前月内的某一天(0到31之间)
        LocalDate.now().withDayOfMonth(1);

        //从1970-01-01开始计算,加上指定的天数
        LocalDate.ofEpochDay(1);

        //当前年份的总天数
        int lengthOfYear = LocalDate.now().lengthOfYear();

        //当前月份的总天数
        int lengthOfMonth = LocalDate.now().lengthOfMonth();

        //当前年月日(默认格式)
        LocalDate.now();

        //当前年月日(指定格式)
        System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));

        //将指定的年月日转换成LocalDate模式(默认格式)
        LocalDate parse = LocalDate.parse("2019-11-01");
        System.out.println(parse);

        //将指定的年月日转换成LocalDate模式(指定格式)
        parse = LocalDate.parse("2019年11月01日", DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
        System.out.println(parse);

        //从1970-01-01到今天总共的天数
        System.out.println(LocalDate.now().toEpochDay());

        //检查当前年份是否是闰年
        System.out.println(LocalDate.now().isLeapYear());

        //获取当前年有多少天
        System.out.println(LocalDate.now().lengthOfYear());
    }

    //类型转换
    @Test
    public void test2(){

        //Date转LocalDate
        Date date = new Date();
        date.toInstant();

//
//        LocalDate now = LocalDate.now();
//        now = now.plusDays(4);
//        DayOfWeek dayOfWeek = now.getDayOfWeek();
//        System.out.println(dayOfWeek.toString());

//        LocalDate now = LocalDate.now();
//        now = now.plusDays(-19);
//        System.out.println(now);
//        System.out.println(now.getDayOfMonth());

//        Map<String,String> map = new HashMap<>();
//        map.put("1","2");
//        map.put("2","2");
//        System.out.println(map.get("3"));

            System.out.println(LocalDate.now().lengthOfYear());



    }
}
